Arduino-তে Interrupts একটি গুরুত্বপূর্ণ ফিচার যা একটি নির্দিষ্ট ইভেন্টের উপর ভিত্তি করে প্রোগ্রামকে স্থগিত করে এবং একটি নির্দিষ্ট ফাংশনকে চালু করে। এতে প্রোগ্রাম দ্রুত সাড়া দিতে পারে। Arduino-তে দুটি প্রধান ধরনের Interrupts রয়েছে: External Interrupts এবং Pin Change Interrupts।
External Interrupts তখন ব্যবহৃত হয় যখন একটি আউটসাইড ডিভাইস (যেমন বাটন) কোনো সিগন্যাল পাঠায়। Arduino-তে সাধারণত INT0 (পিন 2) এবং INT1 (পিন 3) ব্যবহার করা হয়।
volatile bool buttonPressed = false;
void setup() {
pinMode(2, INPUT_PULLUP); // পিন 2 ইনপুট হিসেবে কনফিগার করা
attachInterrupt(digitalPinToInterrupt(2), buttonISR, FALLING); // পিন 2 এ ইন্টারাপ্ট যুক্ত করা
Serial.begin(9600);
}
void loop() {
if (buttonPressed) {
Serial.println("Button was pressed!");
buttonPressed = false; // ইন্টারাপ্ট ফ্ল্যাগ রিসেট করা
}
}
void buttonISR() {
buttonPressed = true; // ইন্টারাপ্ট ফ্ল্যাগ সেট করা
}
volatile
: ভেরিয়েবলটি ইন্টারাপ্ট ফাংশনের দ্বারা পরিবর্তিত হচ্ছে, তাই এটি volatile
হিসেবে ডিফাইন করা হয়েছে যাতে প্রধান লুপে সঠিকভাবে পড়া যায়।attachInterrupt()
: এই ফাংশনটি পিন 2-তে একটি ইন্টারাপ্ট যুক্ত করে, যা পিনের মান FALLING (নিচের দিকে পরিবর্তন) হলে buttonISR
ফাংশনটি কল করে।buttonISR()
: ইন্টারাপ্ট ফাংশনটি ব্যতীত, এটি একটি ফ্ল্যাগ সেট করে যাতে মূল লুপে বোতাম চাপার তথ্য পাওয়া যায়।Pin Change Interrupts তখন ব্যবহৃত হয় যখন কোনো পিনের মান পরিবর্তন হয় (HIGH থেকে LOW বা LOW থেকে HIGH)। Arduino-তে সমস্ত ডিজিটাল পিনে Pin Change Interrupts সক্রিয় করা যায়।
volatile bool ledState = false;
void setup() {
pinMode(8, INPUT_PULLUP); // পিন 8 ইনপুট হিসেবে কনফিগার করা
pinMode(13, OUTPUT); // পিন 13 আউটপুট হিসেবে কনফিগার করা
PCMSK |= (1 << PCINT0); // পিন 8 এ পিন চেঞ্জ ইন্টারাপ্ট সক্রিয় করা
GIMSK |= (1 << PCIE); // পিন চেঞ্জ ইন্টারাপ্ট সক্রিয় করা
sei(); // গ্লোবাল ইন্টারাপ্ট সক্রিয় করা
}
void loop() {
// লুপ খালি রাখা হয়েছে
}
ISR(PCINT0_vect) {
ledState = !ledState; // LED স্টেট পরিবর্তন
digitalWrite(13, ledState); // LED এর স্টেট পরিবর্তন করা
}
PCMSK
এবং GIMSK
: পিন চেঞ্জ ইন্টারাপ্টস সক্রিয় করার জন্য পোর্ট এবং গ্লোবাল ইন্টারাপ্ট সেটিংস কনফিগার করা হয়।sei()
: গ্লোবাল ইন্টারাপ্ট সক্রিয় করা।ISR(PCINT0_vect)
: এই ফাংশনটি পিন চেঞ্জ ইভেন্টের সময় কল হয়, যেখানে LED এর স্টেট পরিবর্তন করা হয়।Arduino-তে ইন্টারাপ্ট ব্যবহার করার মাধ্যমে, আপনি প্রোগ্রামকে দ্রুত এবং কার্যকরভাবে সাড়া দিতে সক্ষম হবেন, যা আপনার প্রকল্পের কার্যকারিতা উন্নত করে।
common.read_more